#ifndef GPU_INSTANCING_DEF_INCLUDED
#define GPU_INSTANCING_DEF_INCLUDED
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"

#if defined(_USE_INSTANCING_ANIM)
#define _USE_INSTANCING_BUFFER
#endif

#if defined(_USE_INSTANCING_ANIM)
CBUFFER_START(AnimationData)
float4 _AnimationData[128];                 // xy 表示旋转、位移贴图中的 frame id, zw 表示非等比缩放贴图中的 frame id
float4 _CurAnimClipData[128];  
CBUFFER_END
#endif

#if defined(_USE_INSTANCING_BUFFER)
CBUFFER_START(ActorData)
float4 _CampColorData[128];                 // xyz 表示颜色， w 表示透明度
half4 _ParamIndex[128];                     // 默认下 x:baseColor idx y:rimColor idx z:_RimIntensity  w:_RimPower
float4 _BrokenInfo[128];                    // 只使用 xy, z 为地貌信息, w 暂未使用，mpb 传不了 float2 数组     
float _RimEffectIndex[128];    
CBUFFER_END

#if defined(UNITY_INSTANCING_ENABLED)
#define ACCESS_INSTANCED_PROP(name) name[unity_InstanceID];
#else
#define ACCESS_INSTANCED_PROP(name) name[0];
#endif

float4 GetCampColor()
{
    return ACCESS_INSTANCED_PROP(_CampColorData);
}

float GetRimEffectIndex()
{
    return ACCESS_INSTANCED_PROP(_RimEffectIndex);
}

half4 GetParamIndex()
{
    return ACCESS_INSTANCED_PROP(_ParamIndex);
}

float4 GetBrokenInfo()
{
    return ACCESS_INSTANCED_PROP(_BrokenInfo);
}
#endif

#endif
